// 导入登录、退出、获取用户资料的请求方法
import { loginApi, getInfoApi } from '@/api/user'
// 读取token、设置token、移除token
import { getToken, setToken, removeToken } from '@/utils/auth'
// 重置路由
import { resetRouter } from '@/router'

// state数据
const state = () => {
  return {
    token: getToken(), // token数据信息
    userInfo: {} // 用户信息
    // name: '', // 用户名称
    // avatar: '' // 用户头像
  }
}

// mutations方法
const mutations = {
  // 设置token
  SET_TOKEN: (state, token) => {
    state.token = token
    setToken(token)
  },
  // 设置用户信息
  setUserInfo(state, data) {
    state.userInfo = data
  },
  //  清除token
  removeToken(state) {
    state.token = null
    removeToken()
  },
  // 清除用户信息
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
// actions方法
const actions = {
  // 用户登录
  // TODO: 用户登录逻辑   发起登录请求、存储token(存state存本地)
  async login(ctx, data) {
    const { data: { token }} = await loginApi(data)
    ctx.commit('SET_TOKEN', token)
  },

  // 获取用户资料
  // TODO: 获取用户资料逻辑   发起请求、存储用户资料(存state)
  async getUserInfo(ctx, data) {
    const res = await getInfoApi()
    // console.log(res.data)
    ctx.commit('setUserInfo', res.data.userinfo)
    return res.data
  },

  // 退出逻辑，发生退出请求
  // TODO: 退出逻辑 【移除本地token、重置路由、重置state数据、重置侧边栏信息】
  logout(ctx) {
    // 移除token
    ctx.commit('removeToken') // must remove  token  first
    //  删除用户资料
    ctx.commit('removeUserInfo')
    // 重置路由
    resetRouter()
  },

  // 移除token
  resetToken({ commit }) {
    return new Promise((resolve) => {
      removeToken() // must remove  token  first
      resolve()
    })
  }
}
// 建立模块暴露出去
export default {
  namespaced: true,
  state,
  mutations,
  actions
}
